// permission权限守卫  
// 导入router文件
import router from '@/router'
// 导入vuex中的数据
import store from '@/store'
// 导入进度条
import NProgress from 'nprogress'
// 导入进度条的样式
import 'nprogress/nprogress.css'
// 导入获取title函数文件
import getPageTitle from '@/utils/get-page-title'
// 导入动态路由表
import { asyncRoutes } from '@/router/index'
// 路由守卫 这是在页面跳转之前执行
/* 
  to 去到哪里
  from 来之哪里
  next() 放行
*/
// 白名单
const whiteList = ['/login', '/404']
router.beforeEach(async (to, from, next) => {
  // 动态设置网页标题
  // document.title = `人力资源管理系统-${to.meta.title}`
  document.title = getPageTitle(to.meta.title)
  const token = store.state.user.token
  // 开启进度条
  NProgress.start()
  // 判断是否携带token
  if (token) {
    // 已经有了token 就不用去login页获取token了
    if (to.path === '/login') {
      next('/')
      // 关闭进度条
      NProgress.done()
    } else {
      // 判断token里面是否有信息
      if (!store.state.user.user.userId) {
        // 触发vuex中的actions函数存储用户信息
        let menus = await store.dispatch('user/setUserInfo')
        // 获取角色的所有menus信息(用户的页面权限信息)
        console.log(menus)
        // 所有的动态路由表
        console.log(asyncRoutes, 'asyncRoutes')
        // filterRoutes是过滤之后的路由表
        const filterRoutes = asyncRoutes.filter(item => {
          return menus.includes(item.children[0].name)
        })
        // 添加没有找到页面的404页面匹配
        filterRoutes.push({ path: '*', redirect: '/404', hidden: true })
        // 动态添加路由
        router.addRoutes(filterRoutes)
        console.log(filterRoutes, 'asyncRoutes')
        store.commit('user/filterRoutes', filterRoutes)
        //解决动态添加路由时出现的白屏
        next({ ...to, replace: true })
      } else {
        next()
      }

    }
  } else {
    // 没有token
    // 判断是否去白名单 includes是判断数组中是否存在改元素 return 是boolearn
    if (to.path === '/login' || to.path === '/404') {
      next()
      // 关闭进度条
      NProgress.done()
    } else {
      next('/login')
    }
  }
})
// 后置路由
router.afterEach(() => {
  // 关闭进度条
  NProgress.done()
})